#include <unistd.h>
#include "stdio.h"
#include "ohos_init.h"
#include "cmsis_os2.h"
#include "iot_gpio.h"
#include "hi_gpio.h"
#include "hi_io.h"
#define LED_GPIO 9      // LED控制引脚 (GPIO9)
#define REALY_GPIO 14   // 继电器控制引脚 (GPIO14)


void init_gpio(){
    IoTGpioInit(LED_GPIO);
    IoTGpioSetDir(LED_GPIO,IOT_GPIO_DIR_OUT);
    IoTGpioSetOutputVal(LED_GPIO,IOT_GPIO_VALUE0);
    IoTGpioInit(REALY_GPIO);
    hi_io_set_pull(REALY_GPIO,HI_IO_PULL_UP);
    hi_io_set_func(REALY_GPIO,HI_IO_FUNC_GPIO_14_GPIO);
    IoTGpioSetDir(REALY_GPIO,IOT_GPIO_DIR_IN);
}

void gpio_task1(void* arg){
    while(1){
        uint8_t realy_state;
        IoTGpioGetInputVal(REALY_GPIO,&realy_state);
        if(realy_state == IOT_GPIO_VALUE0){
            IoTGpioSetOutputVal(LED_GPIO,IOT_GPIO_VALUE0);
            printf("RELAY_GPIO is 0\n");
        }
        else{
            IoTGpioSetOutputVal(LED_GPIO,IOT_GPIO_VALUE1);
            printf("RELAY_GPIO is 1\n");
        }
        usleep(100000);
    }
}

void gpio_demo(){
    init_gpio();
    osThreadAttr_t attr1={
        .name="gpio_task1",
        .stack_size=1024*4,
        .priority=osPriorityNormal,
    };
    osThreadId_t task1_id = osThreadNew((osThreadFunc_t)gpio_task1,NULL,&attr1);
    if(task1_id == NULL){
        printf("[Task1]task1 create failed\n");
    }
    else{
        printf("[Task1]task1 id is %d\n",task1_id);
    }
}

SYS_RUN(gpio_demo);
